package utils

import "gorm.io/gorm"

// 数据库通用语言
type Page struct {
	PageSize int         `json:"pageSize,omitempty" form:"pageSize"`
	PageNum  int         `json:"pageNum,omitempty" form:"pageNum"`
	Total    int64       `json:"total"`
	Data     interface{} `json:"list"`
}

func (p *Page) GetOffset() int {
	return (p.GetPageNum() - 1) * p.GetPageSize()
}

func (p *Page) GetPageNum() int {
	if p.PageNum <= 0 {
		p.PageNum = 1
	}
	return p.PageNum
}

func (p *Page) GetPageSize() int {
	if p.PageSize == 0 {
		p.PageSize = 10
	}
	return p.PageSize
}

func Paginate(page Page, db *gorm.DB) func(db *gorm.DB) *gorm.DB {

	return func(db *gorm.DB) *gorm.DB {
		return db.Offset(page.GetOffset()).Limit(page.GetPageSize())
	}
}
